<!DOCTYPE html>
<title>Test that the document's load event is delayed until a video's meta data is available.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<video id="video1"></video>
<video id="video2"></video>
<video id="video3"><source></source></video>
<script>
async_test(function(t) {
    assertVideoNoSrcNoLoad(document.getElementById("video1"));

    var video = document.getElementById("video2");
    video.src = "content/test.ogv";
    assertVideoSrcNoLoad(video);

    var source = document.querySelector("source");
    source.src = "content/test.ogv";
    assertVideoSrcNoLoad(document.getElementById("video3"));

    window.onload = t.step_func_done(function() {
        assertVideoNoSrcNoLoad(document.getElementById("video1"));
        assertVideoSrcLoad(document.getElementById("video2"));
        assertVideoSrcLoad(document.getElementById("video3"));
    });

    function assertVideoNoSrcNoLoad(video) {
        // Video should not load as there is no "src".
        assert_equals(video.networkState, HTMLMediaElement.NETWORK_EMPTY);
        assert_equals(video.readyState, HTMLMediaElement.HAVE_NOTHING);
    }

    function assertVideoSrcNoLoad(video) {
        // Video loading has just triggered.
        assert_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE);
        assert_equals(video.readyState, HTMLMediaElement.HAVE_NOTHING);
    }

    function assertVideoSrcLoad(video) {
        // The Video should have loaded at least to HAVE_CURRENT_DATA
        assert_not_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE);
        assert_greater_than_equal(video.networkState, HTMLMediaElement.NETWORK_IDLE);
        assert_greater_than_equal(video.readyState, HTMLMediaElement.HAVE_CURRENT_DATA);
    }
});
</script>